extensions-gggl: clamp when converting float to 16bit
authorØyvind Kolås <pippin@gimp.org>
Wed, 20 Dec 2017 02:22:22 +0000 (03:22 +0100)
committerØyvind Kolås <pippin@gimp.org>
Wed, 20 Dec 2017 02:25:34 +0000 (03:25 +0100)
Improve the quality of a conversion that was picked in error for bug #790658

extensions/gggl.c

index cf83988092a3b669645df4b570b83140d0c03940..625d7302410d5092d0125d9234d0a4d5a57edd25 100644 (file)
@@ -543,7 +543,12 @@ conv_rgbaF_rgb16 (const Babl *conversion,unsigned char *src, unsigned char *dst,
 
       for (c = 0; c < 3; c++)
         {
-          *(unsigned short *) dst = lrint ((*(float *) src) * 65535.0);
+          if ((*(float *) src) >= 1.0)
+            *(unsigned short *) dst = 65535;
+          else if ((*(float *) src) <=0)
+            *(unsigned short *) dst = 0;
+          else
+            *(unsigned short *) dst = lrint ((*(float *) src) * 65535.0);
           dst                    += 2;
           src                    += 4;
         }